<?php

$number = '390';
$newpos = array(0 => 0);
$posCount = count($newpos);
if ($posCount == 1) {
    $combs = full_combination($number, $newpos, true);

    foreach ($combs as $comb) {
        if (count($comb) <= 1) {
            continue;
        } 
        if (areConsecutive($comb)) {
            if (empty($value)) {
                $result[] = $number;
                continue;
            } 

            if (!empty($value)) {
                if (array_intersect($comb, $value)) {
                    $result[] = $number;
                    continue;
                } 
            } 
        } 
    } 
}
var_dump($result);
// 检查数组中的数字整体是否连续
// 包含重复的数字
function areConsecutive($chars, $value = []) {
    // 有重复元素不算连续
    $tmp = array_unique($chars);    
    if (count($chars) != count($tmp)) {
        return false;
    } 
    // 0和9不同时存在的情况
    if (!in_array("0", $chars) || !in_array("9", $chars)) {
        $min = min($chars);
        $max = max($chars);
        $n = count($chars);		 
        return $max - $min + 1 == $n;
    } 
    // 0和9同时存在，也算相连的，计算稍微复杂一些
    $visited = [];
    for ($i = 0; $i < count($chars); ++$i) {
        if (in_array($i, $chars)) {
            $visited[] = $i;
        } else {
            break;
        } 
    } 
    for ($i = 9; $i > 0; --$i) {
        if (in_array($i, $chars)) {
            $visited[] = $i;
        } else {
            break;
        } 
    } 

    sort($chars);
    sort($visited); 
    #print_r($visited);
    #print_r($chars); exit;
    return $chars == $visited;
} 
// 指定位置的全组合，位置必须全部包含，pos 下标从0开始
function full_combination($str, $pos = [], $need_all_pos = false) {
    // 返回结果
    $result = []; 
    // 字符长度
    $num = strlen($str); 
    // 总计可能的组合数
    $total = pow(2, $num); 
    // 本组包含的字符位置
    $positions = [];

    for ($i = 1; $i < $total; ++$i) {
        $tmp = [];
        $positions = []; 
        // 依次将数字 i 与 2^n 按位与，判断第 n 位是否为 1
        for ($j = 0; $j < $num; ++$j) {
            if (($i &pow(2, $j)) == pow(2, $j)) {
                $tmp[] = $str[$j];
                $positions[] = $j;
            } 
        } 
        // 如果指定了特定位置，这里排除不包含指定位置的组合
        if (!empty($pos)) {
            // 如果所有指定位置都需要满足
            if ($need_all_pos) {
                $diff = array_diff($pos, $positions);
                if ($diff) {
                    // 指定位置没有都包含在结果集中，有差异
                    // 这里跳过本组结果
                    continue;
                } 
            } 
            // 如果指定的位置只需要部分满足（有且大于1个位置）
            if (!$need_all_pos) {
                // 如果组合不包含任意指定的位置，那么排除这组结果
                $inter = array_intersect($pos, $positions);
                if (!$inter) {
                    // 取交集，结果为空
                    // 说明所有指定的位置都不在本组结果中，跳过本组数据
                    continue;
                } 
            } 
        } 
        // 保存结果
        $result[] = $tmp;
    } 
    return $result;
} 

?>
